package tool

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

// 项目配置
type Config struct {
	AppName       string         `json:"app_name"`
	AppMode       string         `json:"app_mode"`
	AppHost       string         `json:"app_host"`
	AppPort       string         `json:"app_port"`
	Sms           SmsConfig      `json:"sms"`
	Database      DatabaseConfig `json:"database"`
	RedisConfig   RedisConfig    `json:"redis_config"`
	JwtConfig     JwtConfig      `json:"jwt_config"`
	RongYunConfig RongYunConfig  `json:"rongYun_config"`
	QiLiuyunConfig QiLiuyunConfig `json:"qiLiuyun_config"`
}

// redis相关配置
type RedisConfig struct {
	Addr     string `json:"addr"`
	Port     string `json:"port"`
	Password string `json:"password"`
	Db       int    `json:"db"`
}

// 短信服务配置
type SmsConfig struct {
	SignName     string `json:"sign_name"`
	TemplateCode string `json:"template_code"`
	RegionId     string `json:"region_id"`
	AppKey       string `json:"app_key"`
	AppSecret    string `json:"app_secret"`
}

// 数据库相关配置
type DatabaseConfig struct {
	Driver   string `json:"driver"`
	Url      string `json:"url"`
	User     string `json:"user"`
	Password string `json:"password"`
	Host     string `json:"host"`
	Port     string `json:"port"`
	DbName   string `json:"db_name"`
	Charset  string `json:"charset"`
	ShowSql  bool   `json:"show_sql"`
}

// jwt相关设置
type JwtConfig struct {
	JwtSecret string `json:"jwtSecret"`
	Issuer    string `json:"Issuer"`
	Subject   string `json:"Subject"`
}
//融云相关配置
type RongYunConfig struct {
	AppKey    string `json:"app_key"`
	AppSecret string `json:"app_secret"`
}
//七牛云相关配置
type QiLiuyunConfig struct {
	AccessKey   string `json:"AccessKey"`
	SecretKey   string `json:"SecretKey"`
	QiniuServer string `json:"QiniuServer"`
	Bucket      string `json:"bucket"`
}
var _cfg *Config = nil

func GetConf() *Config {
	return _cfg
}
func ParseConfig(path string) (*Config, error) {
	file, err := os.Open(path)
	if err != nil {
		panic(err)
	}
	defer file.Close()
	reader := bufio.NewReader(file)
	decoder := json.NewDecoder(reader)
	if err = decoder.Decode(&_cfg); err != nil {
		return nil, err
	}
	return _cfg, nil
}

func init() {
	_, err := ParseConfig("./config/app.json")
	if err != nil {
		panic(err.Error())
	}
	fmt.Println("配置文件初始化成功")
}
